前言
原本概述完expression(運算式),想接著介紹Statements(述句),
沒想到我在翻閱ECMA的時候,發現漏了些什麼,原來expression(運算式)上面還有一個ECMAScript Language來規範JavaScript的運作,expression(運算式)只是規範的一部份,依據ECMA-JavaScript的分類,ECMAScript Language可以分為六類
- Source Text(原始碼)
- Lexical Grammar(詞彙語法)
- Expressions(運算式)
- Statements and Declarations(述句與宣告)
- Functions and Classes(函式與類別)
- Scripts and Modules(腳本與模組)
有些我們知道而且常用到,有些則是我們常用到但是卻不知道的,也有一些是我現在無法理解的東西,如果我理解他之後發現他很重要會再做介紹,這邊來極盡所能來為大家概述。
Source Text(原始碼)
Source Text(原始碼)在文字翻譯領域,指所要翻譯成其他語言的原始文字。
而JavaScript所使用的編碼為Unicode,而我們再寫code的用的所有語言及符號屬於是Source Text,再執行上都會轉換成Unicode再執行,也就是為什麼
不建議在code裡面使用中文的緣故,並不是所有國家都支援中文的編碼轉換。
只要無法轉換成Unicode就會出現編碼錯誤。
Lexical Grammar(詞彙語法)
Lexical Grammar(詞彙語法)是一些特定的關鍵字和實體語法還有用來自動插入分號來結束陳述式的規則。--MDN-Lexical grammar
上面說到我們使用的code(Source Text)會透過編碼轉換成Unicode,
而Lexical Grammar(詞彙語法),是用來規範Unicode的規則
常見的Lexical Grammar(詞彙語法)依ECMA-JavaScript分類有下面幾種:
- Unicode Format-Control Characters(控制字元)
負責處理文本的開始、連字與不連字的處理。
- White space(空白字元)
適當的空格可以增加程式碼的可讀性,但是在計算機中這些都是不必要的,
所以會有White space(空白字元)移除不必要的空白來減少資料傳輸量
- Line terminators(行終止字元)
指的是換行,跟White space(空白字元)一樣增加程式碼的可讀性,編碼時移除不必要的內容來減少資料傳輸量。
- Comments(註解)
可以讓一些程式碼不被執行。
- Tokens(符號)
語法為下面幾種,但微妙的是部分內容都會在下面幾個分類被詳細說明
IdentifierName
PrivateIdentifier(私有標識符)
Punctuator
NumericLiteral
StringLiteral
Template
- Names and Keywords(名稱與關鍵字)
IdentifierName(定義名稱)
用一個名稱去連結一個值,也就是給變數一個名稱讓他去指向一個值。
像是定義一個變數名稱去指向一個值、定義一個函式的名稱去指向一個函式
Keywords(關鍵字)
Keywords(關鍵字)有特殊意義的詞彙,這部分的規範比較不統一,
雖然有著特殊意義,不能隨意使用,
但是不是所有Keywords的都被列為Reserved words(保留字),
他們有些是本身就有特殊意義,有些則是結合上下文才有特殊意義,
但是為了避免解讀上的困難,不建議使用Keywords去做Identifiers
Reserved words(保留字)
有特殊用途,隨意不能使用。
Future reserved words(未來的保留字)
現在還沒有用途,不過未來使用可能有特殊用途,所以不能使用。
- Punctuators(標點符號)
如其名就是標點符號,例如下面這些:
{ ( ) [ ] . ... ; , < > <= >= == != === !== + - * % ** ++ -- << >> >>> & | ^ ! ~ && || ?? ? : = += -= *= %= **= <<= >>= >>>= &= |= ^= &&= ||= ??= =>
- Literals(文字)
Null Literals(Null)
Boolean Literals(布林值true跟false)
Numeric Literals(數字)
String Literals(字串)
Regular Expression Literals(正規表達式)
Template Literal Lexical Components(佔位符)
- Automatic Semicolon Insertion(自動分號插入)
ECMAScript上的語句通常是以Semicolon(分號)做結尾,有時候分號會在Source Text(原始碼)被省略,而這些被省略的Semicolon(分號)會在編碼上自動補上。
結語
Source Text(原始碼)跟Lexical Grammar(詞彙語法)這兩個是JavaScript極為重要的部份,一個對著我們工程師、一個對著計算機,這些是我們使用這門語言基礎,雖然是我們不被容易注意到卻是極為重要的存在,也是ECMAScript Language的地基,建完地基之後,剩下就是的部份就是我們常見的部份了,後面我會再慢慢說明。
有沒有覺得理解越多,會發現自己越無知,前方知識是大海深不可測宛如地獄一般,但是真正可怕的並不是地獄,而是你必須獨自一個人去面對地獄,別擔心鯊魚會陪你一起走過這段這段艱辛的旅程,一起互相扶持到最後。
語出--bilibili網站up主-楊顏同學
參考資料
ECMA-JavaScript
MDN-Lexical grammar
wiki-Source Text